package br.com.sgmf.web.managedbean;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sgmf.dao.FuncionarioDAO;
import br.com.sgmf.model.Endereco;
import br.com.sgmf.model.Estado;
import br.com.sgmf.model.Funcionario;

@Component
@ManagedBean
@SessionScoped
public class FuncionarioBean {

	private Funcionario funcionario;
	private Endereco endereco;
	private List<Funcionario> funcionarios;

	@Autowired
	private FuncionarioDAO funcionarioDAO;

	@PostConstruct
	public void init() {
		funcionario = new Funcionario();
		endereco = new Endereco();

		funcionarios = new ArrayList<Funcionario>();
	}

	public String salvar() {
		FacesMessage message;

		funcionario.setEndereco(endereco);

		if (funcionario.getId() == null) {
			funcionarioDAO.save(funcionario);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Funcionário cadastrado com sucesso!", null);
		} else {
			funcionarioDAO.update(funcionario);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Funcionário editado com sucesso!", null);
		}

		funcionario = new Funcionario();
		endereco = new Endereco();

		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, message);

		return null;
	}

	public String editar(Funcionario funcionario) {
		this.funcionario = funcionario;
		this.endereco = funcionario.getEndereco();
		return null;
	}

	public String excluir(Funcionario funcionario) {
		funcionarioDAO.delete(funcionario);

		funcionario = new Funcionario();

		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
				"Funcionário excluído com sucesso!", null);
		context.addMessage(null, message);

		return null;
	}

	public Estado[] getEstados() {
		return Estado.values();
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public List<Funcionario> getFuncionarios() {
		return funcionarioDAO.findAll();
	}

	public void setFuncionarios(List<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}

}
